Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
1 line
27 KiB
Plaintext
1 line
27 KiB
Plaintext
{"version":3,"file":"wrappingLoader.js","sources":["../../../../src/config/loaders/wrappingLoader.ts"],"sourcesContent":["import commonjs from '@rollup/plugin-commonjs';\nimport { stringMatchesSomePattern } from '@sentry/core';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { RollupBuild, RollupError } from 'rollup';\nimport { rollup } from 'rollup';\nimport type { ServerComponentContext, VercelCronsConfig } from '../../common/types';\nimport type { LoaderThis } from './types';\n\n// Just a simple placeholder to make referencing module consistent\nconst SENTRY_WRAPPER_MODULE_NAME = 'sentry-wrapper-module';\n\n// Needs to end in .cjs in order for the `commonjs` plugin to pick it up\nconst WRAPPING_TARGET_MODULE_NAME = '__SENTRY_WRAPPING_TARGET_FILE__.cjs';\n\nconst apiWrapperTemplatePath = path.resolve(__dirname, '..', 'templates', 'apiWrapperTemplate.js');\nconst apiWrapperTemplateCode = fs.readFileSync(apiWrapperTemplatePath, { encoding: 'utf8' });\n\nconst pageWrapperTemplatePath = path.resolve(__dirname, '..', 'templates', 'pageWrapperTemplate.js');\nconst pageWrapperTemplateCode = fs.readFileSync(pageWrapperTemplatePath, { encoding: 'utf8' });\n\nconst middlewareWrapperTemplatePath = path.resolve(__dirname, '..', 'templates', 'middlewareWrapperTemplate.js');\nconst middlewareWrapperTemplateCode = fs.readFileSync(middlewareWrapperTemplatePath, { encoding: 'utf8' });\n\nlet showedMissingAsyncStorageModuleWarning = false;\n\nconst serverComponentWrapperTemplatePath = path.resolve(\n __dirname,\n '..',\n 'templates',\n 'serverComponentWrapperTemplate.js',\n);\nconst serverComponentWrapperTemplateCode = fs.readFileSync(serverComponentWrapperTemplatePath, { encoding: 'utf8' });\n\nconst routeHandlerWrapperTemplatePath = path.resolve(__dirname, '..', 'templates', 'routeHandlerWrapperTemplate.js');\nconst routeHandlerWrapperTemplateCode = fs.readFileSync(routeHandlerWrapperTemplatePath, { encoding: 'utf8' });\n\nexport type WrappingLoaderOptions = {\n pagesDir: string | undefined;\n appDir: string | undefined;\n pageExtensionRegex: string;\n excludeServerRoutes: Array<RegExp | string>;\n wrappingTargetKind: 'page' | 'api-route' | 'middleware' | 'server-component' | 'route-handler';\n vercelCronsConfig?: VercelCronsConfig;\n nextjsRequestAsyncStorageModulePath?: string;\n isDev?: boolean;\n};\n\n/**\n * Replace the loaded file with a wrapped version the original file. In the wrapped version, the original file is loaded,\n * any data-fetching functions (`getInitialProps`, `getStaticProps`, and `getServerSideProps`) or API routes it contains\n * are wrapped, and then everything is re-exported.\n */\n// eslint-disable-next-line complexity\nexport default function wrappingLoader(\n this: LoaderThis<WrappingLoaderOptions>,\n userCode: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n userModuleSourceMap: any,\n): void {\n // We know one or the other will be defined, depending on the version of webpack being used\n const {\n pagesDir,\n appDir,\n pageExtensionRegex,\n excludeServerRoutes = [],\n wrappingTargetKind,\n vercelCronsConfig,\n nextjsRequestAsyncStorageModulePath,\n isDev,\n } = 'getOptions' in this ? this.getOptions() : this.query;\n\n this.async();\n\n let templateCode: string;\n\n if (wrappingTargetKind === 'page' || wrappingTargetKind === 'api-route') {\n if (pagesDir === undefined) {\n this.callback(null, userCode, userModuleSourceMap);\n return;\n }\n\n // Get the parameterized route name from this page's filepath\n const parameterizedPagesRoute = path\n // Get the path of the file inside of the pages directory\n .relative(pagesDir, this.resourcePath)\n // Replace all backslashes with forward slashes (windows)\n .replace(/\\\\/g, '/')\n // Add a slash at the beginning\n .replace(/(.*)/, '/$1')\n // Pull off the file extension\n // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor -- not end user input\n .replace(new RegExp(`\\\\.(${pageExtensionRegex})`), '')\n // Any page file named `index` corresponds to root of the directory its in, URL-wise, so turn `/xyz/index` into\n // just `/xyz`\n .replace(/\\/index$/, '')\n // In case all of the above have left us with an empty string (which will happen if we're dealing with the\n // homepage), sub back in the root route\n .replace(/^$/, '/');\n\n // Skip explicitly-ignored pages\n if (stringMatchesSomePattern(parameterizedPagesRoute, excludeServerRoutes, true)) {\n this.callback(null, userCode, userModuleSourceMap);\n return;\n }\n\n if (wrappingTargetKind === 'page') {\n templateCode = pageWrapperTemplateCode;\n } else if (wrappingTargetKind === 'api-route') {\n templateCode = apiWrapperTemplateCode;\n } else {\n throw new Error(`Invariant: Could not get template code of unknown kind \"${wrappingTargetKind}\"`);\n }\n\n templateCode = templateCode.replace(/__VERCEL_CRONS_CONFIGURATION__/g, JSON.stringify(vercelCronsConfig));\n\n // Inject the route and the path to the file we're wrapping into the template\n templateCode = templateCode.replace(/__ROUTE__/g, parameterizedPagesRoute.replace(/\\\\/g, '\\\\\\\\'));\n } else if (wrappingTargetKind === 'server-component' || wrappingTargetKind === 'route-handler') {\n if (appDir === undefined) {\n this.callback(null, userCode, userModuleSourceMap);\n return;\n }\n\n // Get the parameterized route name from this page's filepath\n const parameterizedPagesRoute = path\n // Get the path of the file inside of the app directory\n .relative(appDir, this.resourcePath)\n // Replace all backslashes with forward slashes (windows)\n .replace(/\\\\/g, '/')\n // Add a slash at the beginning\n .replace(/(.*)/, '/$1')\n // Pull off the file name\n .replace(/\\/[^/]+\\.(js|ts|jsx|tsx)$/, '')\n // In case all of the above have left us with an empty string (which will happen if we're dealing with the\n // homepage), sub back in the root route\n .replace(/^$/, '/');\n\n // Skip explicitly-ignored pages\n if (stringMatchesSomePattern(parameterizedPagesRoute, excludeServerRoutes, true)) {\n this.callback(null, userCode, userModuleSourceMap);\n return;\n }\n\n // The following string is what Next.js injects in order to mark client components:\n // https://github.com/vercel/next.js/blob/295f9da393f7d5a49b0c2e15a2f46448dbdc3895/packages/next/build/analysis/get-page-static-info.ts#L37\n // https://github.com/vercel/next.js/blob/a1c15d84d906a8adf1667332a3f0732be615afa0/packages/next-swc/crates/core/src/react_server_components.rs#L247\n // We do not want to wrap client components\n if (userCode.includes('__next_internal_client_entry_do_not_use__')) {\n this.callback(null, userCode, userModuleSourceMap);\n return;\n }\n\n if (wrappingTargetKind === 'server-component') {\n templateCode = serverComponentWrapperTemplateCode;\n } else {\n templateCode = routeHandlerWrapperTemplateCode;\n }\n\n if (nextjsRequestAsyncStorageModulePath !== undefined) {\n templateCode = templateCode.replace(\n /__SENTRY_NEXTJS_REQUEST_ASYNC_STORAGE_SHIM__/g,\n nextjsRequestAsyncStorageModulePath,\n );\n } else {\n if (!showedMissingAsyncStorageModuleWarning) {\n // eslint-disable-next-line no-console\n console.warn(\n \"[@sentry/nextjs] The Sentry SDK could not access the 'RequestAsyncStorage' module. Certain features may not work. There is nothing you can do to fix this yourself, but future SDK updates may resolve this.\",\n );\n showedMissingAsyncStorageModuleWarning = true;\n }\n templateCode = templateCode.replace(\n /__SENTRY_NEXTJS_REQUEST_ASYNC_STORAGE_SHIM__/g,\n '@sentry/nextjs/async-storage-shim',\n );\n }\n\n templateCode = templateCode.replace(/__ROUTE__/g, parameterizedPagesRoute.replace(/\\\\/g, '\\\\\\\\'));\n\n const componentTypeMatch = path.posix\n .normalize(path.relative(appDir, this.resourcePath))\n // Replace all backslashes with forward slashes (windows)\n .replace(/\\\\/g, '/')\n // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n .match(new RegExp(`(?:^|/)?([^/]+)\\\\.(?:${pageExtensionRegex})$`));\n\n if (componentTypeMatch?.[1]) {\n let componentType: ServerComponentContext['componentType'];\n switch (componentTypeMatch[1]) {\n case 'page':\n componentType = 'Page';\n break;\n case 'layout':\n componentType = 'Layout';\n break;\n case 'head':\n componentType = 'Head';\n break;\n case 'not-found':\n componentType = 'Not-found';\n break;\n case 'loading':\n componentType = 'Loading';\n break;\n default:\n componentType = 'Unknown';\n }\n\n templateCode = templateCode.replace(/__COMPONENT_TYPE__/g, componentType);\n } else {\n templateCode = templateCode.replace(/__COMPONENT_TYPE__/g, 'Unknown');\n }\n } else if (wrappingTargetKind === 'middleware') {\n templateCode = middlewareWrapperTemplateCode;\n } else {\n throw new Error(`Invariant: Could not get template code of unknown kind \"${wrappingTargetKind}\"`);\n }\n\n // Replace the import path of the wrapping target in the template with a path that the `wrapUserCode` function will understand.\n templateCode = templateCode.replace(/__SENTRY_WRAPPING_TARGET_FILE__/g, WRAPPING_TARGET_MODULE_NAME);\n\n // Run the proxy module code through Rollup, in order to split the `export * from '<wrapped file>'` out into\n // individual exports (which nextjs seems to require).\n wrapUserCode(templateCode, userCode, userModuleSourceMap, isDev, this.resourcePath)\n .then(({ code: wrappedCode, map: wrappedCodeSourceMap }) => {\n this.callback(null, wrappedCode, wrappedCodeSourceMap);\n })\n .catch(err => {\n // eslint-disable-next-line no-console\n console.warn(\n `[@sentry/nextjs] Could not instrument ${this.resourcePath}. An error occurred while auto-wrapping:\\n${err}`,\n );\n this.callback(null, userCode, userModuleSourceMap);\n });\n}\n\n/**\n * Use Rollup to process the proxy module code, in order to split its `export * from '<wrapped file>'` call into\n * individual exports (which nextjs seems to need).\n *\n * Wraps provided user code (located under the import defined via WRAPPING_TARGET_MODULE_NAME) with provided wrapper\n * code. Under the hood, this function uses rollup to bundle the modules together. Rollup is convenient for us because\n * it turns `export * from '<wrapped file>'` (which Next.js doesn't allow) into individual named exports.\n *\n * Note: This function may throw in case something goes wrong while bundling.\n *\n * @param wrapperCode The wrapper module code\n * @param userModuleCode The user module code\n * @param userModuleSourceMap The source map for the user module\n * @param isDev Whether we're in development mode (affects sourcemap generation)\n * @param userModulePath The absolute path to the user's original module (for sourcemap accuracy)\n * @returns The wrapped user code and a source map that describes the transformations done by this function\n */\nasync function wrapUserCode(\n wrapperCode: string,\n userModuleCode: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n userModuleSourceMap: any,\n isDev?: boolean,\n userModulePath?: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Promise<{ code: string; map?: any }> {\n const wrap = (withDefaultExport: boolean): Promise<RollupBuild> =>\n rollup({\n input: SENTRY_WRAPPER_MODULE_NAME,\n\n plugins: [\n // We're using a simple custom plugin that virtualizes our wrapper module and the user module, so we don't have to\n // mess around with file paths and so that we can pass the original user module source map to rollup so that\n // rollup gives us a bundle with correct source mapping to the original file\n {\n name: 'virtualize-sentry-wrapper-modules',\n resolveId: id => {\n if (id === SENTRY_WRAPPER_MODULE_NAME || id === WRAPPING_TARGET_MODULE_NAME) {\n return id;\n }\n\n return null;\n },\n load(id) {\n if (id === SENTRY_WRAPPER_MODULE_NAME) {\n return withDefaultExport ? wrapperCode : wrapperCode.replace('export { default } from', 'export {} from');\n }\n\n if (id !== WRAPPING_TARGET_MODULE_NAME) {\n return null;\n }\n\n // In prod/build, we should not interfere with sourcemaps\n if (!isDev || !userModulePath) {\n return { code: userModuleCode, map: userModuleSourceMap };\n }\n\n // In dev mode, we need to adjust the sourcemap to use absolute paths for the user's file.\n // This ensures debugger breakpoints correctly map back to the original file.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const userSources: string[] = userModuleSourceMap?.sources;\n if (Array.isArray(userSources)) {\n return {\n code: userModuleCode,\n map: {\n ...userModuleSourceMap,\n sources: userSources.map((source: string, index: number) => (index === 0 ? userModulePath : source)),\n },\n };\n }\n\n // If no sourcemap exists, create a simple identity mapping with the absolute path\n return {\n code: userModuleCode,\n map: {\n version: 3,\n sources: [userModulePath],\n sourcesContent: [userModuleCode],\n mappings: '',\n },\n };\n },\n },\n\n // People may use `module.exports` in their API routes or page files. Next.js allows that and we also need to\n // handle that correctly so we let a plugin to take care of bundling cjs exports for us.\n commonjs({\n sourceMap: true,\n strictRequires: true, // Don't hoist require statements that users may define\n ignoreDynamicRequires: true, // Don't break dynamic requires and things like Webpack's `require.context`\n ignore() {\n // We basically only want to use this plugin for handling the case where users export their handlers with module.exports.\n // This plugin would also be able to convert any `require` into something esm compatible but webpack does that anyways so we just skip that part of the plugin.\n // (Also, modifying require may break user code)\n return true;\n },\n }),\n ],\n\n // We only want to bundle our wrapper module and the wrappee module into one, so we mark everything else as external.\n external: sourceId => sourceId !== SENTRY_WRAPPER_MODULE_NAME && sourceId !== WRAPPING_TARGET_MODULE_NAME,\n\n // Prevent rollup from stressing out about TS's use of global `this` when polyfilling await. (TS will polyfill if the\n // user's tsconfig `target` is set to anything before `es2017`. See https://stackoverflow.com/a/72822340 and\n // https://stackoverflow.com/a/60347490.)\n context: 'this',\n\n // Rollup's path-resolution logic when handling re-exports can go wrong when wrapping pages which aren't at the root\n // level of the `pages` directory. This may be a bug, as it doesn't match the behavior described in the docs, but what\n // seems to happen is this:\n //\n // - We try to wrap `pages/xyz/userPage.js`, which contains `export { helperFunc } from '../../utils/helper'`\n // - Rollup converts '../../utils/helper' into an absolute path\n // - We mark the helper module as external\n // - Rollup then converts it back to a relative path, but relative to `pages/` rather than `pages/xyz/`. (This is\n // the part which doesn't match the docs. They say that Rollup will use the common ancestor of all modules in the\n // bundle as the basis for the relative path calculation, but both our temporary file and the page being wrapped\n // live in `pages/xyz/`, and they're the only two files in the bundle, so `pages/xyz/`` should be used as the\n // root. Unclear why it's not.)\n // - As a result of the miscalculation, our proxy module will include `export { helperFunc } from '../utils/helper'`\n // rather than the expected `export { helperFunc } from '../../utils/helper'`, thereby causing a build error in\n // nextjs..\n //\n // Setting `makeAbsoluteExternalsRelative` to `false` prevents all of the above by causing Rollup to ignore imports of\n // externals entirely, with the result that their paths remain untouched (which is what we want).\n makeAbsoluteExternalsRelative: false,\n onwarn: (_warning, _warn) => {\n // Suppress all warnings - we don't want to bother people with this output\n // Might be stuff like \"you have unused imports\"\n // _warn(_warning); // uncomment to debug\n },\n });\n\n // Next.js sometimes complains if you define a default export (e.g. in route handlers in dev mode).\n // This is why we want to avoid unnecessarily creating default exports, even if they're just `undefined`.\n // For this reason we try to bundle/wrap the user code once including a re-export of `default`.\n // If the user code didn't have a default export, rollup will throw.\n // We then try bundling/wrapping again, but without including a re-export of `default`.\n let rollupBuild;\n try {\n rollupBuild = await wrap(true);\n } catch (e) {\n if ((e as RollupError)?.code === 'MISSING_EXPORT') {\n rollupBuild = await wrap(false);\n } else {\n throw e;\n }\n }\n\n const finalBundle = await rollupBuild.generate({\n format: 'esm',\n // In dev mode, use inline sourcemaps so debuggers can map breakpoints back to original source.\n // In production, use hidden sourcemaps (no sourceMappingURL comment) to avoid exposing internals.\n sourcemap: isDev ? 'inline' : 'hidden',\n // In dev mode, preserve absolute paths in sourcemaps so debuggers can correctly resolve breakpoints.\n // By default, Rollup converts absolute paths to relative paths, which breaks debugging.\n // We only do this in dev mode to avoid interfering with Sentry's sourcemap upload in production.\n sourcemapPathTransform: isDev\n ? relativeSourcePath => {\n // If we have userModulePath and this relative path matches the end of it, use the absolute path\n if (userModulePath?.endsWith(relativeSourcePath)) {\n return userModulePath;\n }\n // Keep other paths (like sentry-wrapper-module) as-is\n return relativeSourcePath;\n }\n : undefined,\n });\n\n // The module at index 0 is always the entrypoint, which in this case is the proxy module.\n return finalBundle.output[0];\n}\n"],"names":["stringMatchesSomePattern","rollup","commonjs"],"mappings":";;;;;;;;AASA;AACA,MAAM,0BAAA,GAA6B,uBAAuB;;AAE1D;AACA,MAAM,2BAAA,GAA8B,qCAAqC;;AAEzE,MAAM,sBAAA,GAAyB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,uBAAuB,CAAC;AAClG,MAAM,sBAAA,GAAyB,EAAE,CAAC,YAAY,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,MAAA,EAAQ,CAAC;;AAE5F,MAAM,uBAAA,GAA0B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,wBAAwB,CAAC;AACpG,MAAM,uBAAA,GAA0B,EAAE,CAAC,YAAY,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,MAAA,EAAQ,CAAC;;AAE9F,MAAM,6BAAA,GAAgC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,8BAA8B,CAAC;AAChH,MAAM,6BAAA,GAAgC,EAAE,CAAC,YAAY,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,MAAA,EAAQ,CAAC;;AAE1G,IAAI,sCAAA,GAAyC,KAAK;;AAElD,MAAM,kCAAA,GAAqC,IAAI,CAAC,OAAO;AACvD,EAAE,SAAS;AACX,EAAE,IAAI;AACN,EAAE,WAAW;AACb,EAAE,mCAAmC;AACrC,CAAC;AACD,MAAM,kCAAA,GAAqC,EAAE,CAAC,YAAY,CAAC,kCAAkC,EAAE,EAAE,QAAQ,EAAE,MAAA,EAAQ,CAAC;;AAEpH,MAAM,+BAAA,GAAkC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,gCAAgC,CAAC;AACpH,MAAM,+BAAA,GAAkC,EAAE,CAAC,YAAY,CAAC,+BAA+B,EAAE,EAAE,QAAQ,EAAE,MAAA,EAAQ,CAAC;;AAa9G;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,cAAc;;AAEtC,EAAE,QAAQ;AACV;AACA,EAAE,mBAAmB;AACrB,EAAQ;AACR;AACA,EAAE,MAAM;AACR,IAAI,QAAQ;AACZ,IAAI,MAAM;AACV,IAAI,kBAAkB;AACtB,IAAI,mBAAA,GAAsB,EAAE;AAC5B,IAAI,kBAAkB;AACtB,IAAI,iBAAiB;AACrB,IAAI,mCAAmC;AACvC,IAAI,KAAK;AACT,GAAE,GAAI,YAAA,IAAgB,OAAO,IAAI,CAAC,UAAU,EAAC,GAAI,IAAI,CAAC,KAAK;;AAE3D,EAAE,IAAI,CAAC,KAAK,EAAE;;AAEd,EAAE,IAAI,YAAY;;AAElB,EAAE,IAAI,kBAAA,KAAuB,UAAU,kBAAA,KAAuB,WAAW,EAAE;AAC3E,IAAI,IAAI,QAAA,KAAa,SAAS,EAAE;AAChC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,mBAAmB,CAAC;AACxD,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,MAAM,0BAA0B;AACpC;AACA,OAAO,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY;AAC3C;AACA,OAAO,OAAO,CAAC,KAAK,EAAE,GAAG;AACzB;AACA,OAAO,OAAO,CAAC,MAAM,EAAE,KAAK;AAC5B;AACA;AACA,OAAO,OAAO,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AAC3D;AACA;AACA,OAAO,OAAO,CAAC,UAAU,EAAE,EAAE;AAC7B;AACA;AACA,OAAO,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;;AAEzB;AACA,IAAI,IAAIA,6BAAwB,CAAC,uBAAuB,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE;AACtF,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,mBAAmB,CAAC;AACxD,MAAM;AACN,IAAI;;AAEJ,IAAI,IAAI,kBAAA,KAAuB,MAAM,EAAE;AACvC,MAAM,YAAA,GAAe,uBAAuB;AAC5C,IAAI,OAAO,IAAI,kBAAA,KAAuB,WAAW,EAAE;AACnD,MAAM,YAAA,GAAe,sBAAsB;AAC3C,IAAI,OAAO;AACX,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,wDAAwD,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;AACvG,IAAI;;AAEJ,IAAI,YAAA,GAAe,YAAY,CAAC,OAAO,CAAC,iCAAiC,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;;AAE7G;AACA,IAAI,eAAe,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,uBAAuB,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACrG,EAAE,CAAA,MAAO,IAAI,kBAAA,KAAuB,kBAAA,IAAsB,kBAAA,KAAuB,eAAe,EAAE;AAClG,IAAI,IAAI,MAAA,KAAW,SAAS,EAAE;AAC9B,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,mBAAmB,CAAC;AACxD,MAAM;AACN,IAAI;;AAEJ;AACA,IAAI,MAAM,0BAA0B;AACpC;AACA,OAAO,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY;AACzC;AACA,OAAO,OAAO,CAAC,KAAK,EAAE,GAAG;AACzB;AACA,OAAO,OAAO,CAAC,MAAM,EAAE,KAAK;AAC5B;AACA,OAAO,OAAO,CAAC,2BAA2B,EAAE,EAAE;AAC9C;AACA;AACA,OAAO,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;;AAEzB;AACA,IAAI,IAAIA,6BAAwB,CAAC,uBAAuB,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE;AACtF,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,mBAAmB,CAAC;AACxD,MAAM;AACN,IAAI;;AAEJ;AACA;AACA;AACA;AACA,IAAI,IAAI,QAAQ,CAAC,QAAQ,CAAC,2CAA2C,CAAC,EAAE;AACxE,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,mBAAmB,CAAC;AACxD,MAAM;AACN,IAAI;;AAEJ,IAAI,IAAI,kBAAA,KAAuB,kBAAkB,EAAE;AACnD,MAAM,YAAA,GAAe,kCAAkC;AACvD,IAAI,OAAO;AACX,MAAM,YAAA,GAAe,+BAA+B;AACpD,IAAI;;AAEJ,IAAI,IAAI,mCAAA,KAAwC,SAAS,EAAE;AAC3D,MAAM,YAAA,GAAe,YAAY,CAAC,OAAO;AACzC,QAAQ,+CAA+C;AACvD,QAAQ,mCAAmC;AAC3C,OAAO;AACP,IAAI,OAAO;AACX,MAAM,IAAI,CAAC,sCAAsC,EAAE;AACnD;AACA,QAAQ,OAAO,CAAC,IAAI;AACpB,UAAU,8MAA8M;AACxN,SAAS;AACT,QAAQ,sCAAA,GAAyC,IAAI;AACrD,MAAM;AACN,MAAM,YAAA,GAAe,YAAY,CAAC,OAAO;AACzC,QAAQ,+CAA+C;AACvD,QAAQ,mCAAmC;AAC3C,OAAO;AACP,IAAI;;AAEJ,IAAI,eAAe,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,uBAAuB,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;;AAErG,IAAI,MAAM,kBAAA,GAAqB,IAAI,CAAC;AACpC,OAAO,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC;AACzD;AACA,OAAO,OAAO,CAAC,KAAK,EAAE,GAAG;AACzB;AACA,OAAO,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC;;AAExE,IAAI,IAAI,kBAAkB,GAAG,CAAC,CAAC,EAAE;AACjC,MAAM,IAAI,aAAa;AACvB,MAAM,QAAQ,kBAAkB,CAAC,CAAC,CAAC;AACnC,QAAQ,KAAK,MAAM;AACnB,UAAU,aAAA,GAAgB,MAAM;AAChC,UAAU;AACV,QAAQ,KAAK,QAAQ;AACrB,UAAU,aAAA,GAAgB,QAAQ;AAClC,UAAU;AACV,QAAQ,KAAK,MAAM;AACnB,UAAU,aAAA,GAAgB,MAAM;AAChC,UAAU;AACV,QAAQ,KAAK,WAAW;AACxB,UAAU,aAAA,GAAgB,WAAW;AACrC,UAAU;AACV,QAAQ,KAAK,SAAS;AACtB,UAAU,aAAA,GAAgB,SAAS;AACnC,UAAU;AACV,QAAQ;AACR,UAAU,aAAA,GAAgB,SAAS;AACnC;;AAEA,MAAM,YAAA,GAAe,YAAY,CAAC,OAAO,CAAC,qBAAqB,EAAE,aAAa,CAAC;AAC/E,IAAI,OAAO;AACX,MAAM,YAAA,GAAe,YAAY,CAAC,OAAO,CAAC,qBAAqB,EAAE,SAAS,CAAC;AAC3E,IAAI;AACJ,EAAE,OAAO,IAAI,kBAAA,KAAuB,YAAY,EAAE;AAClD,IAAI,YAAA,GAAe,6BAA6B;AAChD,EAAE,OAAO;AACT,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,wDAAwD,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;AACrG,EAAE;;AAEF;AACA,EAAE,YAAA,GAAe,YAAY,CAAC,OAAO,CAAC,kCAAkC,EAAE,2BAA2B,CAAC;;AAEtG;AACA;AACA,EAAE,YAAY,CAAC,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY;AACpF,KAAK,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,oBAAA,EAAsB,KAAK;AAChE,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,oBAAoB,CAAC;AAC5D,IAAI,CAAC;AACL,KAAK,KAAK,CAAC,GAAA,IAAO;AAClB;AACA,MAAM,OAAO,CAAC,IAAI;AAClB,QAAQ,CAAC,sCAAsC,EAAE,IAAI,CAAC,YAAY,CAAC,0CAA0C,EAAE,GAAG,CAAC,CAAA;AACA,OAAA;AACA,MAAA,IAAA,CAAA,QAAA,CAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,CAAA;AACA,IAAA,CAAA,CAAA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAA,YAAA;AACA,EAAA,WAAA;AACA,EAAA,cAAA;AACA;AACA,EAAA,mBAAA;AACA,EAAA,KAAA;AACA,EAAA,cAAA;AACA;AACA,EAAA;AACA,EAAA,MAAA,IAAA,GAAA,CAAA,iBAAA;AACA,IAAAC,aAAA,CAAA;AACA,MAAA,KAAA,EAAA,0BAAA;;AAEA,MAAA,OAAA,EAAA;AACA;AACA;AACA;AACA,QAAA;AACA,UAAA,IAAA,EAAA,mCAAA;AACA,UAAA,SAAA,EAAA,EAAA,IAAA;AACA,YAAA,IAAA,EAAA,KAAA,0BAAA,IAAA,EAAA,KAAA,2BAAA,EAAA;AACA,cAAA,OAAA,EAAA;AACA,YAAA;;AAEA,YAAA,OAAA,IAAA;AACA,UAAA,CAAA;AACA,UAAA,IAAA,CAAA,EAAA,EAAA;AACA,YAAA,IAAA,EAAA,KAAA,0BAAA,EAAA;AACA,cAAA,OAAA,iBAAA,GAAA,WAAA,GAAA,WAAA,CAAA,OAAA,CAAA,yBAAA,EAAA,gBAAA,CAAA;AACA,YAAA;;AAEA,YAAA,IAAA,EAAA,KAAA,2BAAA,EAAA;AACA,cAAA,OAAA,IAAA;AACA,YAAA;;AAEA;AACA,YAAA,IAAA,CAAA,KAAA,IAAA,CAAA,cAAA,EAAA;AACA,cAAA,OAAA,EAAA,IAAA,EAAA,cAAA,EAAA,GAAA,EAAA,mBAAA,EAAA;AACA,YAAA;;AAEA;AACA;AACA;AACA,YAAA,MAAA,WAAA,GAAA,mBAAA,EAAA,OAAA;AACA,YAAA,IAAA,KAAA,CAAA,OAAA,CAAA,WAAA,CAAA,EAAA;AACA,cAAA,OAAA;AACA,gBAAA,IAAA,EAAA,cAAA;AACA,gBAAA,GAAA,EAAA;AACA,kBAAA,GAAA,mBAAA;AACA,kBAAA,OAAA,EAAA,WAAA,CAAA,GAAA,CAAA,CAAA,MAAA,EAAA,KAAA,MAAA,KAAA,KAAA,CAAA,GAAA,cAAA,GAAA,MAAA,CAAA,CAAA;AACA,iBAAA;AACA,eAAA;AACA,YAAA;;AAEA;AACA,YAAA,OAAA;AACA,cAAA,IAAA,EAAA,cAAA;AACA,cAAA,GAAA,EAAA;AACA,gBAAA,OAAA,EAAA,CAAA;AACA,gBAAA,OAAA,EAAA,CAAA,cAAA,CAAA;AACA,gBAAA,cAAA,EAAA,CAAA,cAAA,CAAA;AACA,gBAAA,QAAA,EAAA,EAAA;AACA,eAAA;AACA,aAAA;AACA,UAAA,CAAA;AACA,SAAA;;AAEA;AACA;AACA,QAAAC,gBAAA,CAAA;AACA,UAAA,SAAA,EAAA,IAAA;AACA,UAAA,cAAA,EAAA,IAAA;AACA,UAAA,qBAAA,EAAA,IAAA;AACA,UAAA,MAAA,GAAA;AACA;AACA;AACA;AACA,YAAA,OAAA,IAAA;AACA,UAAA,CAAA;AACA,SAAA,CAAA;AACA,OAAA;;AAEA;AACA,MAAA,QAAA,EAAA,QAAA,IAAA,QAAA,KAAA,0BAAA,IAAA,QAAA,KAAA,2BAAA;;AAEA;AACA;AACA;AACA,MAAA,OAAA,EAAA,MAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAA,6BAAA,EAAA,KAAA;AACA,MAAA,MAAA,EAAA,CAAA,QAAA,EAAA,KAAA,KAAA;AACA;AACA;AACA;AACA,MAAA,CAAA;AACA,KAAA,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAA,IAAA,WAAA;AACA,EAAA,IAAA;AACA,IAAA,WAAA,GAAA,MAAA,IAAA,CAAA,IAAA,CAAA;AACA,EAAA,CAAA,CAAA,OAAA,CAAA,EAAA;AACA,IAAA,IAAA,CAAA,CAAA,IAAA,IAAA,KAAA,gBAAA,EAAA;AACA,MAAA,WAAA,GAAA,MAAA,IAAA,CAAA,KAAA,CAAA;AACA,IAAA,CAAA,MAAA;AACA,MAAA,MAAA,CAAA;AACA,IAAA;AACA,EAAA;;AAEA,EAAA,MAAA,WAAA,GAAA,MAAA,WAAA,CAAA,QAAA,CAAA;AACA,IAAA,MAAA,EAAA,KAAA;AACA;AACA;AACA,IAAA,SAAA,EAAA,KAAA,GAAA,QAAA,GAAA,QAAA;AACA;AACA;AACA;AACA,IAAA,sBAAA,EAAA;AACA,QAAA,kBAAA,IAAA;AACA;AACA,UAAA,IAAA,cAAA,EAAA,QAAA,CAAA,kBAAA,CAAA,EAAA;AACA,YAAA,OAAA,cAAA;AACA,UAAA;AACA;AACA,UAAA,OAAA,kBAAA;AACA,QAAA;AACA,QAAA,SAAA;AACA,GAAA,CAAA;;AAEA;AACA,EAAA,OAAA,WAAA,CAAA,MAAA,CAAA,CAAA,CAAA;AACA;;;;"} |